/*
*Devuelve el contenido de un fichero de texto en una varible
*
*@param char* nombreFichero path absoluto del fichero
*@return char* string con el contenido del fichero
*@exception si no puede abrir el fichero devuelve NULL
*/

char* leerFichero(char* nombreFichero) {

    FILE *fichero = fopen(nombreFichero,"r");
    if(fichero == NULL){
        return NULL;
    }

    fseek(fichero, 0, SEEK_END);
    //averiguamos el tamaño del fichero
    long int size = ftell(fichero);
    char *content = (char*) malloc (sizeof(char)*size);
    rewind(fichero);

    //leemos el fichero y metemos los valores en content
    fread(content,1,size,fichero);

    return content;
}


/*
*
* Recibe el fichero como un string y devuelve una matriz
* con cada fila como otro string
*
*/
char** cargarLineas(char* ficheroAsString){
   
    printf ("entrando cargarLineas\n");
    char** filas;
    char * fila;
    fila = strtok (ficheroAsString,"\n");
    
    int i = 0;
    while (fila != NULL) {
        printf ("%s\n",fila);
        fila = strtok (NULL, "\n");
        filas[i] = fila;
        i++;
    }

    return filas;
}


void * mymalloc(size_t);
void * myrealloc(void *, size_t);
char ** split(char *, int);


/*
** This function splits a string s, on the character c and returns a
** pointer to an array of strings.
*/

char ** split(char * s, int c) {
    
    char * sptr;
    int word_len; 
    char ** result = NULL;
    int i = 0;

    while(s) {

        if((sptr = strchr(s, c)) != NULL){
            word_len = strlen(s) - strlen(sptr);
            result = (char**) myrealloc(result,(sizeof(char*)*(i+1)));
            result[i] = (char*) mymalloc(word_len + 1);
            strncpy(result[i],s,word_len);
            s = sptr + 1;
        
        } 
        else{
            result[i] = (char*) mymalloc(strlen(s)+1);
            result[i] =  s;
            s = NULL;
        }
        ++i;
    }

    /* assign null to indicate end of array */
    result[i] = (char*) mymalloc(1);
    result[i] = '\0';

    return(result);
}

void * myrealloc(void * ptr, size_t amount) {

    if((ptr = realloc(ptr, amount)) == NULL
        ) {
        perror("Realloc Failed!\n");
    }

    return(ptr);
}

void * mymalloc(size_t amount) {
    
    void * ptr;

    if((ptr = malloc(amount)) == NULL) {
        perror("Malloc Failed!\n");
    }

    return(ptr);
}
